// var Hogan = require('hogan.js');


// //util js
// var Hogan = require('hogan.js');
// var config = {
//     serverHost: 'http://localhost:8080/'
// }

// var _util = {
//     //异步请求
//     request: function (param) {
//         var token = localStorage.getItem('token');
        
//         // 构建headers
//         var headers = {
//             'Content-Type': param.contentType || 'application/x-www-form-urlencoded'
//         };
        
//         if (token) {
//             headers['Authorization'] = `Bearer ${token}`;
//         }

//         $.ajax({
//             type: param.method || 'GET',
//             url: param.url || '',
//             dataType: param.type || 'json',
//             contentType: param.contentType || 'application/x-www-form-urlencoded',
//             data: param.data || null,
//             headers: headers,
//             xhrFields: {
//                 withCredentials: true
//             },
//             crossDomain: true,
//             processData: param.contentType === 'application/json' ? false : true, // 关键修改
//             success: (res) => {
//                 typeof param.success === 'function' && param.success(res);
//             },
//             error: (xhr) => {
//                 // 错误处理逻辑保持不变
//                 if (xhr.status === 401) {
//                     const hadToken = !!localStorage.getItem('token');
//                     localStorage.removeItem('token');
//                     localStorage.removeItem('username');
//                     localStorage.setItem('lastPage', window.location.href);
                    
//                     if (hadToken) {
//                         alert('登录已过期，请重新登录');
//                     } else {
//                         alert('请先登录');
//                     }
//                 }
//                 param.error && param.error(xhr);
//             }
//         });
//     },
//     doLogin: function () {
//         if (confirm("您没有登录需要登录")) {
//             window.location.href = './account-login.html?redirect=' + encodeURIComponent(window.location.href);
//         }
//     },
//     //url连接localhost:....
//     getServerURL: function (path) {
//         return config.serverHost + path;
//     },
//     validateField: function (fieldType, fieldValue) {
//         var fieldValue = $.trim(fieldValue);
//         if (fieldType === 'require') {
//             return !!fieldValue;
//         }
//         else if (fieldType === 'phone') {
//             var strTemp = /^[1][3-9][\d]{9}/;
//             if (strTemp.test(fieldValue)) {
//                 return true;
//             } else {
//                 alert('手机号不合法!');
//                 return false;
//             }
//         }
//     },
//     getURLparam: function (name) {
//         var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
//         var result = window.location.search.substring(1).match(reg);
//         return result ? decodeURIComponent(result[2]) : null;
//     },
//     renderHtml: function (htmlTemplate, data) {
//         var hoganTemplate = Hogan.compile(htmlTemplate);
//         var result = hoganTemplate.render(data);
//         return result;
//     }
// };

// module.exports = _util;




var Hogan = require('hogan.js');


//util js
var Hogan = require('hogan.js');
var config = {
    serverHost: 'http://localhost:8080/'
}

// util.js
var imageBaseUrl = '/';

// util.js

var _util = {
    //异步请求
    request: function (param) {
        var token = localStorage.getItem('token');

        var headers = param.headers || {};
        var contentType = headers['Content-Type'] || 'application/json'; // 默认 JSON
        // 合并 Authorization 头（不覆盖其他头）
        if (token) {
            headers = { ...headers, 'Authorization': `Bearer ${token}` };
        }

        // 调试输出
        console.log('[DEBUG] 发送请求使用Token:', token);

        $.ajax({
            type: param.method || 'GET',
            url: param.url || '',
            dataType: param.type || 'json',
            // contentType: param.contentType || 'application/x-www-form-urlencoded',
            // contentType: param.headers['Content-Type'], // ✅ 传递正确的 Content-Type
            contentType: contentType,
            processData: false, // ✅ 禁止 jQuery 转换数据格式（关键！）
            data: param.data || null,
            xhrFields: {
                withCredentials: true
            },
            crossDomain: true,
            headers: headers,
            // headers: token ? { 
            //     'Authorization': `Bearer ${token}` 
            // } : {},
            success: (res) => {
                typeof param.success === 'function' && param.success(res);
            },
            error: (xhr) => {
                // 统一处理认证错误
                if (xhr.status === 401) {
                    const hadToken = !!localStorage.getItem('token'); // ✅ 先检查

                    localStorage.removeItem('token');
                    localStorage.removeItem('username');
                    localStorage.setItem('lastPage', window.location.href);
                    
                    // 区分是未登录还是token过期
                    // const token = localStorage.getItem('token');
                    if (hadToken) {
                        alert('登录已过期，请重新登录');
                    } else {
                        alert('请先登录');
                    }
                    
                    // window.location.href = './account-login.html';
                    // return;
                }
                
                // 其他错误处理
                param.error && param.error(xhr);
            }
        });
    },
    doLogin: function () {
        if (confirm("您没有登录需要登录")) {

            window.location.href = './account-login.html?redirect=' + encodeURIComponent(window.location.href);

        }

    },
    //url连接localhost:....
    getServerURL: function (path) {
        return config.serverHost + path;
    },
    validateField: function (fieldType, fieldValue) {
        var fieldValue = $.trim(fieldValue);
        if (fieldType === 'require') {
            return !!fieldValue;
        }
        else if (fieldType === 'phone') {
            var strTemp = /^[1][3-9][\d]{9}/;
            if (strTemp.test(fieldValue)) {
                return true;
            } else {
                alert('手机号不合法!');
                return false;
            }
        }
    },

    getURLparam: function (name) {
        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
        var result = window.location.search.substring(1).match(reg);
        return result ? decodeURIComponent(result[2]) : null;
    },
    renderHtml: function (htmlTemplate, data) {
        var hoganTemplate = Hogan.compile(htmlTemplate);
        var result = hoganTemplate.render(data);
        // console.log('result:' + result);
        return result;

    }


};
// 在封装的 request 方法中添加全局错误处理
function request(options) {
    $.ajax({
        url: options.url,
        method: options.method,
        headers: {
            'Authorization': options.headers?.Authorization || '',
            'Content-Type': options.contentType || 'application/json'
        },
        data: options.data,
        success: function(resp) {
            options.success(resp);
        },
        error: function(xhr) {
            if (xhr.status === 401) {
                // Token 过期，清除本地数据并跳转
                localStorage.removeItem('token');
                localStorage.removeItem('username');
                window.location.href = './account-login.html';
            }
            options.error(xhr);
        }
    });
}
// // 图片路径生成器
// _util.getImageUrl = function (filename) {
//     // 如果配置了CDN地址则优先使用
//     const base = window.IMAGE_CDN || '/static/images/';
//     return `${base}${filename}`;
// }

// 价格格式化
_util.formatPrice = function (price) {
    return '¥' + (price ? Number(price).toFixed(2) : '0.00');
}

module.exports = _util; 
